home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 026a / tcal.zip / TCAL.PRG < prev    next >
Text File  |  1991-03-19  |  11KB  |  318 lines

  1. ************************************************************
  2. * Name:      TCAL.PRG                                      *
  3. * Desc:      A popup calendar program.  User can change    *
  4. *            the month or year by pressing the PgUp, PgDn, *
  5. *            + , -                                   * 
  6. * Author:    Todd W. Lindley                               *
  7. * Created:   3/12/91                                       *
  8. * Version:   1.0                                           *
  9. * Revisions: 3/91 - fixed display of dates past 12/1999.   *
  10. *                 - Made all variables private so that     *
  11. *                   they don't conflict with the calling   *
  12. *                   program.                               *
  13. *                                                          * 
  14. * Usage:     DO TCAL WITH row,col,"LARGE/SMALL",date       *
  15. *            ROW  = Upper left corner of calendar          * 
  16. *            COL  = Upper left corner of calendar          *
  17. *            TYPE = "LARGE" or "ANY OTHER STRING"          *
  18. *            DATE =  DATE() or CTOD("DATE")                *
  19. *                                                          *
  20. *            Ex: DO TCAL WITH 2,2,"LARGE",DATE()           *
  21. *            Results: Displays a popup calendar at screen  *
  22. *                     coordinates 2,2 in large format      *
  23. *                     with the calendar displaying the     *
  24. *                     month and year of system date.       *
  25. *                                                          *
  26. *            Ex: DO TCAL WITH 2,2," ",CTOD("01/01/90")     *
  27. *            Results: displays a popup calendar at screen  *
  28. *                     coordinates 2,2 in small format with *
  29. *                     the calendar displaying January 1990 *
  30. *                                      *
  31. * Notes:                                                   *
  32. *      - The program does not check the validity of        *  
  33. *        any parameters                                    *
  34. *      - I have randomly checked some month/year combina-  *
  35. *        tions and the calendars seem to be correct.       *
  36. *      - The minimum row/col for the large calendar is 1,1 *
  37. *      - The minimum row/col for the small calendar is 2,2 *
  38. *                                                          *
  39. * Credits:                                     *
  40. *      - I'd like to thank the author of SMALLCAL.prg for  *
  41. *        allowing me to expand on his/her concept.         *
  42. *                                                          *
  43. * A polite reminder...                                     *
  44. *                                *
  45. *    Since I have taken the time to develop this program,  *
  46. *    please give me credit where credit is due should you  *
  47. *    decide to use any part of this program in your own    *
  48. *    public domain dBASE routines.                         *
  49. *                               *
  50. * Leave comments/suggestions via E-mail on the Ashton Tate *
  51. * BBS to username SLICE.                                   *
  52. ************************************************************
  53.         
  54. PARA start_row,start_col,size,tdate
  55. SAVE SCREEN TO tcalscrn
  56. PRIVATE ALL
  57.   STORE 0 TO month,year,day,firstday,lastday,skip_cols,last_col,col,row
  58.   STORE 0 TO curr,next,x,monthn,last_row,info_row
  59. ** SAVE A FEW SETTINGS
  60. esc_stat=SET("ESCAPE")
  61. talk_stat=SET("TALK")
  62. attr_stat=SET("ATTRIBUTES")
  63.  
  64. SET ESCAPE OFF
  65. SET TALK OFF
  66. SET CURS OFF
  67.  
  68. SET COLOR OF NORMAL TO N/W
  69. DO init
  70. IF size="LARGE"
  71.   DO grid
  72. ELSE
  73.   DO without_grid
  74. ENDIF
  75. DO calc
  76. DO refresh
  77.  
  78. ** MAIN LOOP - READS KEYBOARD
  79. DO WHILE .T.
  80.   key=INKEY()
  81.   DO CASE
  82.     CASE key=27               && Esc
  83.       EXIT
  84.     CASE key=18               && PgUp
  85.       month=month+1
  86.       IF month>12
  87.         month=1
  88.         year=year+1
  89.       ENDIF
  90.       DO calc
  91.       DO refresh
  92.     CASE key=3                && PgDn
  93.       month=month-1
  94.       IF month<1
  95.         month=12
  96.         year=year-1
  97.       ENDIF
  98.       DO calc
  99.       DO refresh
  100.     CASE key=43               && "+"
  101.       year=year+1
  102.       IF year<0
  103.         year=1
  104.       ENDIF
  105.       DO calc
  106.       DO refresh
  107.     CASE key=45               && "-"
  108.       year=year-1
  109.       DO calc
  110.       DO refresh
  111.   ENDCASE
  112. ENDDO
  113.  
  114. SET ESCAPE &esc_stat
  115. SET TALK &talk_stat
  116. SET CURS ON
  117. SET COLOR TO &attr_stat
  118. RESTORE SCREEN FROM tcalscrn
  119. RETURN
  120.  
  121. PROCEDURE refresh
  122. x=1
  123. row=start_row+3
  124. @info_row,start_col+1 CLEAR TO info_row,start_col+skip_cols*6
  125. @info_row,start_col SAY monthn COLOR W+/W
  126. @info_row,last_col-3 SAY STR(year,4,0) COLOR W+/W
  127. IF size="LARGE"
  128.   DO clear_grid
  129. ELSE
  130.   @start_row+3,start_col+1 CLEAR TO last_row-1,last_col-1
  131. ENDIF
  132.  
  133. DO WHILE x<=lastday
  134.   @row,col SAY STR(x,2,0)        && SLIGHTLY FASTER THAN PICT "99"
  135.   col=col+skip_cols
  136.   IF col>last_col
  137.      IF size="LARGE"
  138.        col=start_col+3
  139.        row=row+2
  140.      ELSE
  141.        col=start_col+2
  142.        row=row+1
  143.      ENDIF
  144.   ENDIF
  145.   x=x+1
  146. ENDDO 
  147. RETURN
  148.  
  149. ** INITIAL SET-UP 
  150. PROCEDURE init
  151.   size=UPPER(size)
  152.  ** GET SOME INITIAL DATE INFORMATION
  153.   month=month(tdate)
  154.   year=YEAR(tdate)
  155.   day=DAY(tdate)
  156. RETURN
  157.  
  158. PROCEDURE calc
  159.  ** GET MONTH NAME
  160.   monthn=CMONTH(CTOD(STR(month,2,0)+"/01/91"))
  161.  
  162.  ** CALCULATE 1ST OF MONTH AND BEGINNING OF NEXT MONTH
  163.   beg=CTOD(STR(month,2,0)+"/"+"01/"+STR(year,4,0))
  164.   next=CTOD(STR(month+1,2,0)+"/"+"01/"+STR(year,4,0))
  165.  
  166.  ** CALCULATE # OF DAYS IN MONTH
  167.   firstday=DOW(beg)
  168.   lastday=next-beg
  169.  
  170.  ** STARTING DISPLAY COLUMN OF 1ST DAY OF MONTH
  171.   IF size="LARGE"
  172.     col=skip_cols*(firstday-1)+start_col+3
  173.   ELSE
  174.     col=skip_cols*(firstday-1)+start_col+2
  175.   ENDIF
  176. RETURN
  177.  
  178. PROCEDURE grid
  179. ** EACH @ SAY WAS HARD CODED FOR SPEED IN DRAWING THE GRID.
  180. ** A DO WHILE COULD HAVE BEEN USED BUT WOULD HAVE BEEN TOO SLOW.
  181.   skip_cols=5
  182.   last_col=start_col+skip_cols*6+5
  183.   last_row=start_row+14
  184.   info_row=start_row-1
  185.  
  186.   @start_row-1,start_col-1 CLEAR TO last_row+1,last_col+1
  187.   @start_row+1,start_col+2 SAY "Sun  Mon  Tue  Wed  Thu  Fri  Sat"
  188.   @start_row,start_col TO last_row,last_col
  189.   @start_row+2,start_col TO start_row+2,last_col
  190.   @start_row,start_col+skip_cols TO last_row,start_col+skip_cols*6
  191.   @start_row,start_col+skip_cols*2 TO last_row,start_col+skip_cols*5
  192.   @start_row,start_col+skip_cols*3 TO last_row,start_col+skip_cols*4
  193.  
  194.   @start_row,start_col+skip_cols SAY CHR(194)
  195.   @start_row,start_col+skip_cols*2 SAY CHR(194)
  196.   @start_row,start_col+skip_cols*3 SAY CHR(194)
  197.   @start_row,start_col+skip_cols*4 SAY CHR(194)
  198.   @start_row,start_col+skip_cols*5 SAY CHR(194)
  199.   @start_row,start_col+skip_cols*6 SAY CHR(194)
  200.  
  201.   @start_row+2,start_col SAY CHR(195)
  202.   @start_row+2,start_col+skip_cols SAY CHR(197)
  203.   @start_row+2,start_col+skip_cols*2 SAY CHR(197)
  204.   @start_row+2,start_col+skip_cols*3 SAY CHR(197)
  205.   @start_row+2,start_col+skip_cols*4 SAY CHR(197)
  206.   @start_row+2,start_col+skip_cols*5 SAY CHR(197)
  207.   @start_row+2,start_col+skip_cols*6 SAY CHR(197)
  208.   @start_row+2,last_col SAY CHR(180)
  209.  
  210.   @start_row+4,start_col TO last_row-2,last_col
  211.   @start_row+6,start_col TO last_row-4,last_col
  212.   @start_row+8,start_col TO last_row-6,last_col
  213.  
  214.   @start_row+4,start_col SAY CHR(195)
  215.   @start_row+4,start_col+skip_cols SAY CHR(197)
  216.   @start_row+4,start_col+skip_cols*2 SAY CHR(197)
  217.   @start_row+4,start_col+skip_cols*3 SAY CHR(197)
  218.   @start_row+4,start_col+skip_cols*4 SAY CHR(197)
  219.   @start_row+4,start_col+skip_cols*5 SAY CHR(197)
  220.   @start_row+4,start_col+skip_cols*6 SAY CHR(197)
  221.   @start_row+4,last_col SAY CHR(180)
  222.  
  223.   @start_row+6,start_col SAY CHR(195)
  224.   @start_row+6,start_col+skip_cols SAY CHR(197)
  225.   @start_row+6,start_col+skip_cols*2 SAY CHR(197)
  226.   @start_row+6,start_col+skip_cols*3 SAY CHR(197)
  227.   @start_row+6,start_col+skip_cols*4 SAY CHR(197)
  228.   @start_row+6,start_col+skip_cols*5 SAY CHR(197)
  229.   @start_row+6,start_col+skip_cols*6 SAY CHR(197)
  230.   @start_row+6,last_col SAY CHR(180)
  231.  
  232.   @start_row+8,start_col SAY CHR(195)
  233.   @start_row+8,start_col+skip_cols SAY CHR(197)
  234.   @start_row+8,start_col+skip_cols*2 SAY CHR(197)
  235.   @start_row+8,start_col+skip_cols*3 SAY CHR(197)
  236.   @start_row+8,start_col+skip_cols*4 SAY CHR(197)
  237.   @start_row+8,start_col+skip_cols*5 SAY CHR(197)
  238.   @start_row+8,start_col+skip_cols*6 SAY CHR(197)
  239.   @start_row+8,last_col SAY CHR(180)
  240.  
  241.   @start_row+10,start_col SAY CHR(195)
  242.   @start_row+10,start_col+skip_cols SAY CHR(197)
  243.   @start_row+10,start_col+skip_cols*2 SAY CHR(197)
  244.   @start_row+10,start_col+skip_cols*3 SAY CHR(197)
  245.   @start_row+10,start_col+skip_cols*4 SAY CHR(197)
  246.   @start_row+10,start_col+skip_cols*5 SAY CHR(197)
  247.   @start_row+10,start_col+skip_cols*6 SAY CHR(197)
  248.   @start_row+10,last_col SAY CHR(180)
  249.  
  250.   @start_row+12,start_col SAY CHR(195)
  251.   @start_row+12,start_col+skip_cols SAY CHR(197)
  252.   @start_row+12,start_col+skip_cols*2 SAY CHR(197)
  253.   @start_row+12,start_col+skip_cols*3 SAY CHR(197)
  254.   @start_row+12,start_col+skip_cols*4 SAY CHR(197)
  255.   @start_row+12,start_col+skip_cols*5 SAY CHR(197)
  256.   @start_row+12,start_col+skip_cols*6 SAY CHR(197)
  257.   @start_row+12,last_col SAY CHR(180)
  258.  
  259.   @last_row,start_col SAY CHR(192)
  260.   @last_row,start_col+skip_cols SAY CHR(193)
  261.   @last_row,start_col+skip_cols*2 SAY CHR(193)
  262.   @last_row,start_col+skip_cols*3 SAY CHR(193)
  263.   @last_row,start_col+skip_cols*4 SAY CHR(193)
  264.   @last_row,start_col+skip_cols*5 SAY CHR(193)
  265.   @last_row,start_col+skip_cols*6 SAY CHR(193)
  266.   @last_row,last_col SAY CHR(217)
  267.  
  268.   @start_row,last_col+2 FILL TO last_row+2,last_col+3 COLOR W/N
  269.   @last_row+2,start_col+1 FILL TO last_row+2,last_col+3 COLOR W/N
  270. *  @start_row-1,start_col+1 SAY "April"
  271.   @last_row+1,start_col+1 SAY "Month:"
  272.   @last_row+1,start_col+8 SAY "PgUp/PgDn" COLOR R/W
  273.   @last_row+1,last_col-9 SAY "Year:"
  274.   @last_row+1,last_col-3 SAY "+/-" COLOR R/W
  275. RETURN
  276.  
  277. PROCEDURE clear_grid
  278.   @row,start_col+skip_cols-2 SAY "  "
  279.   @row,start_col+skip_cols*2-2 SAY "  "
  280.   @row,start_col+skip_cols*3-2 SAY "  "
  281.   @row,start_col+skip_cols*4-2 SAY "  "
  282.   @row,start_col+skip_cols*5-2 SAY "  "
  283.   @row,start_col+skip_cols*6-2 SAY "  "
  284.   @row,start_col+skip_cols*7-2 SAY "  "
  285.  
  286.   @last_row-1,start_col+skip_cols-2 SAY "  "
  287.   @last_row-1,start_col+skip_cols*2-2 SAY "  "
  288.   @last_row-1,start_col+skip_cols*3-2 SAY "  "
  289.   @last_row-1,start_col+skip_cols*4-2 SAY "  "
  290.   @last_row-1,start_col+skip_cols*5-2 SAY "  "
  291.   @last_row-1,start_col+skip_cols*6-2 SAY "  "
  292.   @last_row-1,start_col+skip_cols*7-2 SAY "  "
  293.  
  294.   @last_row-3,start_col+skip_cols-2 SAY "  "
  295.   @last_row-3,start_col+skip_cols*2-2 SAY "  "
  296.   @last_row-3,start_col+skip_cols*3-2 SAY "  "
  297.   @last_row-3,start_col+skip_cols*4-2 SAY "  "
  298.   @last_row-3,start_col+skip_cols*5-2 SAY "  "
  299.   @last_row-3,start_col+skip_cols*6-2 SAY "  "
  300.   @last_row-3,start_col+skip_cols*7-2 SAY "  "
  301. RETURN
  302.  
  303. PROCEDURE without_grid
  304.   skip_cols=4
  305.   last_col=start_col+skip_cols*6+4
  306.   last_row=start_row+9
  307.   info_row=start_row+1
  308.   @start_row-1,start_col-2 CLEAR TO last_row+1,last_col+2
  309.   @start_row,start_col-1 TO last_row,last_col+1 DOUBLE
  310.   @start_row+2,start_col+1 SAY "Sun Mon Tue Wed Thu Fri Sat"
  311.   @last_row+1,start_col-1 SAY "Month:"
  312.   @last_row+1,start_col+6 SAY "PgUp/PgDn" COLOR R/W
  313.   @last_row+1,last_col-7 SAY "Year:"
  314.   @last_row+1,last_col-1 SAY "+/-" COLOR R/W
  315.   @start_row+1,last_col+3 FILL TO last_row+2,last_col+4 COLOR W/N
  316.   @last_row+2,start_col FILL TO last_row+2,last_col+4 COLOR W/N
  317. RETURN
  318.